/**
 * 
 */
package edu.acatlan.unam.client.ui.controlador;

//Librerías de la clase
import java.util.ArrayList;

//Librerías del proyecto
import edu.acatlan.unam.shared.bdoo.TEsquema;
import edu.acatlan.unam.shared.bdoo.TTabla;
import edu.acatlan.unam.client.ui.DialogSQL;
import edu.acatlan.unam.client.ui.controlador.editorTabla.CEditorTabla;
import edu.acatlan.unam.client.ui.controlador.lienzo.CLienzo;

/**
 * @author jacobo
 * 
 * Clase controladora del panel principal. Es el elemento principal de comunicación
 * entre los diferentes controles de la aplicación. Almacena los esquemas y distribuye la información
 * a los diferentes controladores.
 */
public class CDisegnador implements CBDisegnadorEditorT, CBDisegnadorLienzo {
	/**
	 * Propiedades de la clase
	 */
	private ArrayList<TEsquema> esquemas;
	private int esquemaActual;
	private CLienzo cLienzo;
	private CEditorTabla cEditor;
	
	/**
	 * Constructor de la clase
	 */
	public CDisegnador() {
		//TODO: Obtener los esquemas de la base de datos.
		esquemas = new ArrayList<TEsquema>();
		esquemas.add(new TEsquema());
		esquemas.get(0).setNombreBD("ModelAcatlanBD");
	}
	
	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.editorTabla.CBPrincipalEditorT#actualizarModelo()
	 */
	public void actualizarModelo() {
		cLienzo.actualizar();
	}

	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.CBPrincipalLienzo#getTablas()
	 */
	public ArrayList<TTabla> getTablas() {
		return esquemas.get(esquemaActual).getTablas();
	}

	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.CBPrincipalLienzo#ponerEditor(int)
	 */
	public void ponerEditor(TTabla t) {
		cEditor.mostrarTabla(t);
	}
	
	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.CBPrincipalLienzo#vincular(edu.acatlan.unam.client.ui.controlador.lienzo.CLienzo)
	 */
	public void vincular(CLienzo c) {
		cLienzo = c;
	}

	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.CBPrincipalEditorT#vincular(edu.acatlan.unam.client.ui.controlador.editorTabla.CEditorTabla)
	 */
	public void vincular(CEditorTabla c) {
		cEditor = c;
	}

	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.CBDisegnadorEditorT#nombreTablaValido(java.lang.String)
	 */
	public boolean nombreTablaValido(String nTabla) {
		TEsquema e = esquemas.get(esquemaActual);
		
		for(TTabla t : e.getTablas())
			if(t.getNombreTb().equalsIgnoreCase(nTabla))
				return false;
		
		return true;
	}

	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.CBDisegnadorLienzo#getIdEsquema()
	 */
	public Long getIdEsquema() {
		return esquemas.get(esquemaActual).getIdEsquema();
	}
	
	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.CBDisegnadorLienzo#generarScript()
	 */
	public void generarScript() {
		String script = esquemas.get(esquemaActual).getCadenaDLL();
		DialogSQL d = new DialogSQL(esquemas.get(esquemaActual).getNombreBD(), script);
		d.show();
	}
}
